

 --- 地表纹理
 henv.grounds = {
    ["Lgrs"] ="洛丹伦 - 夏 - 草地", 
    ["LTlt"]="洛丹伦 - 秋 - 草地",
    ["Iice"]="冰封王座 - 冰",
    ["Ldrt"]="洛丹伦 - 夏- 泥土",
    ["Ldro"]="洛丹伦 - 夏- 烂泥土(坑洼的泥土)",
    ["Dlvc"]="地下城 - 岩浆碎片",
    ["Clvg"]="费尔伍德 - 叶子",
}
---刷子
---@param x number
---@param y number
---@param ground any 地形 默认  HL_ID.env.ground.summer
---@param variation number -1随机地板样式
---@param Area number 0 1 2 3 4 尺寸
---@param Shape number 0圆形 1正方形
function henv.SetTerrainType(x, y, ground, variation, Area, Shape)
    x = x or 0
    y = y or 0
    ground = ground or HL_ID.env.ground.summer
    variation = variation or -1
    Area = Area or 0
    Shape = Shape or 0
    cj.SetTerrainType(x, y, ground, variation, Area, Shape)
end

---重置地面纹理变化
function henv.ResetUbersplat(whichSplat)
    if whichSplat==nil then
        print_err("重置地面纹理变化whichSplat==nil")
        return 
    end
    cj.ResetUbersplat(whichSplat)
end
---删除地面纹理变化
function henv.DestroyUbersplat(whichSplat)
    if whichSplat==nil then
        print_err("删除地面纹理变化whichSplat==nil")
        return 
    end
    cj.DestroyUbersplat(whichSplat)
end

---获取坐标(${X},${Y})处的地形
---@param x number
---@param y number
function henv.GetTerrainType(x, y)
    x = x or 0
    y = y or 0
    return henv.grounds[string.id2char(cj.GetTerrainType(x, y))]
end

---坐标(${X},${Y})处的地形悬崖高
---悬崖高度:深水区为0,浅水区为1,平原为2,之后每层+1.
---@param x number
---@param y number
function henv.GetTerrainCliffLevel(x, y)
    x = x or 0
    y = y or 0
    return cj.GetTerrainCliffLevel(x, y)
end


---可破坏物生成
---@param doodad number 可破坏物类型  HL_ID.env.doodad.treeSummer[1]
---@param x number
---@param y number
---@param face number 面向角度
---@param scale number 尺寸缩放
---@param variation number
---@param flag boolean 是否无敌
function henv.CreateDestructable(doodad, x, y, face, scale, variation, flag)
    doodad = doodad or HL_ID.env.doodad.treeSummer[1]
    x = x or 0
    y = y or 0
    face = face or math.random(0, 360)
    scale = scale or math.random(0.5, 1)
    variation = variation or -1
    flag = flag or false
    local dest = cj.CreateDestructable(doodad, x, y, face, scale, variation)
    ---可破坏物是否无敌
    cj.SetDestructableInvulnerable(dest, flag)
end

---地形单位
---@param unit number 地形单位 HL_ID.env.unit_model.stone0
---@param x number
---@param y number
function henv.CreateUnit(unit, x, y)
    unit= unit or HL_ID.env.unit_model.stone0
    x = x or 0
    y = y or 0
    cj.CreateUnit(cj.Player(PLAYER_NEUTRAL_PASSIVE), unit, x, y, bj_UNIT_FACING)
end
